package com.example.demo.handler;

import com.alibaba.excel.write.handler.AbstractRowWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.Comment;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;

/**
 * 添加批注
 * <p>
 * XSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, int col1, int row1, int col2, int row2)
 * dx1：起始单元格的x偏移量，填0即可；
 * dy1：起始单元格的y偏移量，填0即可；
 * dx2：终止单元格的x偏移量，填0即可；
 * dy2：终止单元格的y偏移量，填0即可；
 * <p>
 * <p>
 * col1：起始单元格列序号，从0开始计算；
 * row1：起始单元格行序号，从0开始计算；
 * col2：终止单元格列序号，从0开始计算，如例子中col1=1,col2=2就表示单元格列为第二列；
 * row2：终止单元格行序号，从0开始计算，如例子中row1=0,row2=1就表示单元行为第一行；
 */
public class CommentWriteHandler extends AbstractRowWriteHandler {

    @Override
    public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {
        if (isHead) {
            Sheet sheet = writeSheetHolder.getSheet();
            Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
            // 在第一行 第二列创建一个批注
            Comment comment =
                    drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, (short) 0, 1, (short) 1, 1));
            // 输入批注信息
            comment.setString(new XSSFRichTextString("哈哈哈哈"));
            // 将批注添加到单元格对象中 从0开始计算 第1行第2列
            sheet.getRow(0).getCell(0).setCellComment(comment);
        }
    }
}